#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <net/ethernet.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char const *argv[])
{
    // int a = 0x01020344;
    // int b = 0x11020304;
    // printf("a转换字节序之前内容为:%x\n转换字节序之后内容为:%x\n",a,htonl(a));//主机字节序转网络字节序,htonl是转ip,htons是转端口
    // printf("b转换字节序之前内容为:%x\n转换字节序之后内容为:%x\n",b,ntohl(b));//网络字节序转主机字节序,ntohl是转ip,ntohs是转端口
    
    // char buf[] = "169.134.245.123";
    // unsigned int ip = 0;
    // inet_pton(AF_INET,buf,&ip);//将buf里面的字符串转换成一个四字节的数据,放到指定变量内
    // printf("ip=%u\n",ip);
    // unsigned char *p = (char*)&ip;//定义一个指针,指向前面被转换之后的变量,通过强转,获得第一个字节的首地址,之后就可以通过这个指针访问后面的每一个字节了
    // printf("%u.%u.%u.%u\n",*p,*(p+1),*(p+2),*(p+3));

    // unsigned char ip[4] = {156,245,245,124};
    // char ip_str[INET_ADDRSTRLEN] = "";
    // inet_ntop(AF_INET,ip,ip_str,INET_ADDRSTRLEN);//将获取到的ip转换成字符串,放到指定的变量数组内
    // printf("%s\n",ip_str);

    // int sockfd = socket(AF_INET,SOCK_DGRAM,0);//获取套接字描述符
    // if (sockfd < 0)perror("sockfd");
    // printf("sockfd is : %d\n",sockfd);
    // close(sockfd);

    // int sockfd = socket(AF_INET,SOCK_DGRAM,0);
    // if (sockfd < 0)perror("sockfd");
    // struct sockaddr_in in_addr;
    // bzero(&in_addr,sizeof(in_addr));//对变量一定长度清零,长度为第二个参数
    // in_addr.sin_family = AF_INET;//family存放协议
    // in_addr.sin_port = htons(9554);//port存放端口
    // inet_pton(AF_INET,"192.168.1.32",&in_addr.sin_addr.s_addr);//s_addr存放ip
    // sendto(sockfd,"阿巴阿巴",sizeof("阿巴阿巴"),0,(struct sockaddr *)&in_addr,sizeof(in_addr));//将第二个参数的内容通过sockfd发到in_addr指定的ip
    // close(sockfd);
    
    // int sockfd = socket(AF_INET,SOCK_DGRAM,0);
    // if (sockfd < 0)
    // {
    //     perror("sockfd");
    //     return 0;
    // }
    // struct sockaddr_in bind_addr;
    // bzero(&bind_addr,sizeof(bind_addr));
    // bind_addr.sin_family = AF_INET;
    // bind_addr.sin_port = htons(9000);
    // bind_addr.sin_addr.s_addr = INADDR_ANY;//INADDR_ANY 绑定本地机的所有IP地址 
    // bind(sockfd, (struct sockaddr *)&bind_addr, sizeof(bind_addr));// bind固定的端口IP信息
    // struct sockaddr_in in_addr;
    // bzero(&in_addr,sizeof(in_addr));//对变量一定长度清零,长度为第二个参数
    // in_addr.sin_family = AF_INET;//family存放协议
    // in_addr.sin_port = htons(9999);//port存放端口
    // inet_pton(AF_INET,"192.168.1.32",&in_addr.sin_addr.s_addr);//s_addr存放ip
    // sendto(sockfd,"阿巴阿巴",sizeof("阿巴阿巴"),0,(struct sockaddr *)&in_addr,sizeof(in_addr));//将第二个参数的内容通过sockfd发到in_addr指定的ip
    // close(sockfd);

    // int sockfd = socket(AF_INET,SOCK_DGRAM,0);
    // if (sockfd < 0)
    // {
    //     perror("sockfd");
    //     return 0;
    // }
    // struct sockaddr_in bind_addr;
    // bzero(&bind_addr,sizeof(bind_addr));
    // bind_addr.sin_family = AF_INET;
    // bind_addr.sin_port = htons(9000);
    // bind_addr.sin_addr.s_addr = INADDR_ANY;//INADDR_ANY 绑定本地机的所有IP地址 
    // int bind_T = bind(sockfd, (struct sockaddr *)&bind_addr, sizeof(bind_addr));// bind固定的端口IP信息
    // if (bind_T < 0)
    // {
    //     perror("bind");
    //     close(sockfd);
    //     return 0;
    // }
    // while (1)    
    // {
    //     char buf[1024] = "";
        
    //     struct sockaddr addr_recv;
    //     int addr_recv_len = sizeof(addr_recv);
    //     int len = recvfrom(sockfd,buf,sizeof(buf),0,&addr_recv,&addr_recv_len);//将内容放到buf里面,ip和端口号放到addr_recv里面
    //     struct sockaddr_in *addr_in = (struct sockaddr_in*)&addr_recv; //通过强转成addr_in,就可以访问之前adr_recv里面的内容
    //     char ip_str[INET_ADDRSTRLEN] = "";//存储后面转换成字符串的ip
    //     inet_ntop(AF_INET,&addr_in->sin_addr.s_addr,ip_str,sizeof(ip_str));//将s_addr里面的内容按每个字节分开组成字符串放到ip_str里面
    //     printf("%s(%d):%s(%d)\n",ip_str,ntohs(addr_in->sin_port),buf,len);
    //     if (strcmp(buf,"close")==0)break;
    // }
    // close(sockfd);

    return 0;
}
